1020. Веревка
В стену вбито n гвоздей так, что они образуют выпуклый многоугольник. На эти гвозди натянута веревка как показано на рисунке ниже:
Зная координаты центров гвоздей и
их радиус шляпок (он одинаковый для всех гвоздей), найти длину натянутой
веревки.
Вход. Первая
строка содержит количество гвоздей n (1 £ n £ 100) и радиус их шляпок r. Следующие n строк содержат координаты (x,
y) центров гвоздей в порядке обхода их по часовой стрелке.
Известно, что |x|, |y|
£ 100 и являются вещественными числами.
Выход. Длина
веревки, натянутой на гвозди. Длину выводить с двумя точками после запятой.
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
14.28
геометрия
Длина
веревки равна сумме расстояний между центрами соседних гвоздей плюс 2pr (длина обода шляпки гвоздя).
Объявим константу p. В массивах x и y храним координаты центров гвоздей.
#define PI acos(-1.0)
double len,r,x[100],y[100];
Читаем входные данные. Присвоим переменой len значение длины обода шляпки.
scanf("%d %lf",&n,&r);
len = 2*PI*r;
for(i=0;i<n;i++) scanf("%lf
%lf",&x[i],&y[i]);
Положим (n + 1) – ую точку равной первой.
x[n] = x[0]; y[n] = y[0];
Если n > 1, то ответом будет 2pr. Иначе к значению len = 2pr следует прибавить сумму расстояний между центрами соседних
гвоздей.
if (n > 1)
for(i=0;i<n;i++)
len +=
sqrt((x[i+1]-x[i])*(x[i+1]-x[i]) + (y[i+1]-y[i])*(y[i+1]-y[i]));
Выводим длину веревки len с двумя точками после запятой.
printf("%.2lf\n",len);